/*
 * Productos.java
 *
 * Created on 26 de febrero de 2005, 03:38 PM
 */

package administrador;
import java.awt.Panel;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;     
/**
 *
 * @author  User
 */
public class Productos extends javax.swing.JPanel {
    Conexion conexion;
    int bodega;
    
    //Esta variable me va ha servir para las actualizaciones:
    String AntInfo;
    Usuario user;
 
     javax.swing.JTable tabla;
     JScrollPane jScrollPane3;

     //Buscador Producto
     BuscadorProducto b;

    /** Creates new form Productos */
    public Productos(Conexion cEnt,int bEnt,Usuario user) {
        initComponents();
        conexion=cEnt;
        bodega=bEnt;
        refrescar();
        cb_categoria.setSelectedIndex(0);
        this.user=user;
        //bt_modpro.setVisible(false);
        bt_foto.setVisible(false);
        b=new BuscadorProducto(conexion,this,bodega);

        
        //Quito el boton de borrado para el Vendedor:
        String priv=user.getPrivilegio();
        if(priv.equals("e")){
        bt_borrarPro.setVisible(false);
        bt_cCodigo.setVisible(false);
        bt_accion.setVisible(false);
        txt_cant.setEditable(false);
        txt_precio.setEditable(false);
        bt_costo.setVisible(false); 
        bt_CrearPro.setVisible(false);
        }
        //*******************************************
        
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        panel = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        txt_codigo = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        cb_categoria = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        lbl_total = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        area_desc = new javax.swing.JTextArea();
        jLabel9 = new javax.swing.JLabel();
        jLabel10 = new javax.swing.JLabel();
        txt_rank = new javax.swing.JTextField();
        jLabel11 = new javax.swing.JLabel();
        txt_cant = new javax.swing.JTextField();
        jScrollPane2 = new javax.swing.JScrollPane();
        area_nom = new javax.swing.JTextArea();
        jLabel8 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        cb_bodegas = new javax.swing.JComboBox();
        txt_min = new javax.swing.JTextField();
        jLabel12 = new javax.swing.JLabel();
        bt_foto = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        bt_cCodigo = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        bt_accion = new javax.swing.JButton();
        bt_borrarPro = new javax.swing.JButton();
        bt_CrearPro = new javax.swing.JButton();
        jLabel13 = new javax.swing.JLabel();
        jLabel14 = new javax.swing.JLabel();
        bt_modpro = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        txt_precio = new javax.swing.JTextField();
        bt_costo = new javax.swing.JButton();
        jLabel6 = new javax.swing.JLabel();
        txt_distribucion = new javax.swing.JTextField();

        addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                formFocusGained(evt);
            }
        });
        setLayout(new java.awt.BorderLayout());

        panel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        panel.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                panelFocusGained(evt);
            }
        });
        panel.setLayout(null);

        jLabel1.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
        jLabel1.setForeground(new java.awt.Color(102, 102, 102));
        jLabel1.setText("Codigo");
        panel.add(jLabel1);
        jLabel1.setBounds(40, 70, 70, 30);

        txt_codigo.setNextFocusableComponent(cb_categoria);
        txt_codigo.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txt_codigoKeyTyped(evt);
            }
        });
        panel.add(txt_codigo);
        txt_codigo.setBounds(110, 70, 170, 30);

        jLabel3.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
        jLabel3.setForeground(new java.awt.Color(102, 102, 102));
        jLabel3.setText("Nombre");
        panel.add(jLabel3);
        jLabel3.setBounds(40, 140, 70, 20);

        cb_categoria.setBackground(new java.awt.Color(240, 239, 239));
        cb_categoria.setNextFocusableComponent(area_nom);
        panel.add(cb_categoria);
        cb_categoria.setBounds(110, 100, 170, 30);

        jLabel2.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
        jLabel2.setForeground(new java.awt.Color(102, 102, 102));
        jLabel2.setText("Categoria");
        panel.add(jLabel2);
        jLabel2.setBounds(40, 110, 70, 20);

        jLabel4.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
        jLabel4.setForeground(new java.awt.Color(102, 102, 102));
        jLabel4.setText("Descripcion:");
        panel.add(jLabel4);
        jLabel4.setBounds(40, 200, 80, 20);

        jLabel5.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
        jLabel5.setForeground(new java.awt.Color(102, 102, 102));
        jLabel5.setText("Stock Local:");
        panel.add(jLabel5);
        jLabel5.setBounds(550, 30, 90, 30);

        lbl_total.setForeground(new java.awt.Color(104, 134, 124));
        panel.add(lbl_total);
        lbl_total.setBounds(540, 260, 80, 20);

        jLabel7.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
        jLabel7.setForeground(new java.awt.Color(102, 102, 102));
        jLabel7.setText("Bodega:");
        panel.add(jLabel7);
        jLabel7.setBounds(570, 60, 50, 40);

        area_desc.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        area_desc.setNextFocusableComponent(txt_precio);
        jScrollPane1.setViewportView(area_desc);

        panel.add(jScrollPane1);
        jScrollPane1.setBounds(120, 200, 310, 290);

        jLabel9.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
        jLabel9.setForeground(new java.awt.Color(102, 102, 102));
        jLabel9.setText("Precio:");
        panel.add(jLabel9);
        jLabel9.setBounds(450, 200, 70, 20);

        jLabel10.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
        jLabel10.setForeground(new java.awt.Color(102, 102, 102));
        jLabel10.setText("Ranking:");
        panel.add(jLabel10);
        jLabel10.setBounds(580, 260, 70, 20);

        txt_rank.setNextFocusableComponent(txt_cant);
        panel.add(txt_rank);
        txt_rank.setBounds(630, 260, 120, 20);

        jLabel11.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
        jLabel11.setForeground(new java.awt.Color(102, 102, 102));
        jLabel11.setText("Stock Locales:");
        panel.add(jLabel11);
        jLabel11.setBounds(450, 260, 100, 20);

        txt_cant.setBackground(new java.awt.Color(255, 204, 102));
        txt_cant.setFont(new java.awt.Font("Arial", 1, 24));
        txt_cant.setForeground(new java.awt.Color(102, 0, 0));
        txt_cant.setNextFocusableComponent(txt_min);
        panel.add(txt_cant);
        txt_cant.setBounds(620, 30, 130, 30);

        area_nom.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        area_nom.setNextFocusableComponent(area_desc);
        jScrollPane2.setViewportView(area_nom);

        panel.add(jScrollPane2);
        jScrollPane2.setBounds(120, 140, 630, 50);

        jLabel8.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
        jLabel8.setForeground(new java.awt.Color(204, 0, 51));
        jLabel8.setText("Posibles Fuentes:");
        panel.add(jLabel8);
        jLabel8.setBounds(450, 280, 100, 20);

        jButton1.setText("Buscar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        panel.add(jButton1);
        jButton1.setBounds(280, 70, 110, 30);

        cb_bodegas.setBackground(new java.awt.Color(240, 240, 240));
        cb_bodegas.setFont(new java.awt.Font("Tahoma", 1, 12));
        cb_bodegas.setForeground(new java.awt.Color(153, 0, 0));
        cb_bodegas.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cb_bodegasItemStateChanged(evt);
            }
        });
        cb_bodegas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cb_bodegasActionPerformed(evt);
            }
        });
        panel.add(cb_bodegas);
        cb_bodegas.setBounds(620, 70, 130, 21);

        txt_min.setNextFocusableComponent(bt_accion);
        panel.add(txt_min);
        txt_min.setBounds(540, 240, 210, 20);

        jLabel12.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
        jLabel12.setForeground(new java.awt.Color(102, 102, 102));
        jLabel12.setText("Cant Minima:");
        panel.add(jLabel12);
        jLabel12.setBounds(450, 240, 90, 20);

        bt_foto.setText("Foto");
        bt_foto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bt_fotoActionPerformed(evt);
            }
        });
        panel.add(bt_foto);
        bt_foto.setBounds(400, 90, 110, 30);

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        bt_cCodigo.setFont(new java.awt.Font("MS Sans Serif", 1, 10));
        bt_cCodigo.setForeground(new java.awt.Color(153, 51, 0));
        bt_cCodigo.setText("Cambio Codigo");
        bt_cCodigo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bt_cCodigoActionPerformed(evt);
            }
        });
        jPanel1.add(bt_cCodigo);

        jButton2.setFont(new java.awt.Font("MS Sans Serif", 1, 11));
        jButton2.setForeground(new java.awt.Color(83, 146, 209));
        jButton2.setText("Limpiar");
        jButton2.setNextFocusableComponent(txt_codigo);
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton2);

        bt_accion.setFont(new java.awt.Font("MS Sans Serif", 1, 10));
        bt_accion.setForeground(new java.awt.Color(153, 0, 0));
        bt_accion.setText("Modificar");
        bt_accion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bt_accionActionPerformed(evt);
            }
        });
        jPanel1.add(bt_accion);

        bt_borrarPro.setFont(new java.awt.Font("MS Sans Serif", 1, 10));
        bt_borrarPro.setForeground(new java.awt.Color(153, 0, 0));
        bt_borrarPro.setText("Borrar Producto");
        bt_borrarPro.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bt_borrarProActionPerformed(evt);
            }
        });
        jPanel1.add(bt_borrarPro);

        bt_CrearPro.setForeground(new java.awt.Color(153, 0, 0));
        bt_CrearPro.setText("Crear Nuevo Producto");
        bt_CrearPro.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bt_CrearProActionPerformed(evt);
            }
        });
        jPanel1.add(bt_CrearPro);

        panel.add(jPanel1);
        jPanel1.setBounds(450, 420, 300, 70);

        jLabel13.setFont(new java.awt.Font("Stencil", 1, 36));
        jLabel13.setForeground(new java.awt.Color(204, 153, 0));
        jLabel13.setText("Productos");
        panel.add(jLabel13);
        jLabel13.setBounds(40, 20, 240, 40);

        jLabel14.setForeground(new java.awt.Color(153, 0, 0));
        jLabel14.setText("Modificacion");
        panel.add(jLabel14);
        jLabel14.setBounds(190, 40, 70, 40);

        bt_modpro.setText("Ultimas Modif");
        bt_modpro.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bt_modproActionPerformed(evt);
            }
        });
        panel.add(bt_modpro);
        bt_modpro.setBounds(400, 70, 110, 20);

        jPanel2.setLayout(new java.awt.BorderLayout());

        txt_precio.setFont(new java.awt.Font("Tahoma", 1, 14));
        txt_precio.setNextFocusableComponent(txt_rank);
        txt_precio.setPreferredSize(new java.awt.Dimension(12, 20));
        jPanel2.add(txt_precio, java.awt.BorderLayout.CENTER);

        bt_costo.setText("Costo");
        bt_costo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bt_costoActionPerformed(evt);
            }
        });
        jPanel2.add(bt_costo, java.awt.BorderLayout.WEST);

        panel.add(jPanel2);
        jPanel2.setBounds(540, 200, 210, 20);

        jLabel6.setText("Distribución");
        panel.add(jLabel6);
        jLabel6.setBounds(450, 220, 70, 14);
        panel.add(txt_distribucion);
        txt_distribucion.setBounds(540, 220, 210, 20);

        add(panel, java.awt.BorderLayout.CENTER);
    }// </editor-fold>//GEN-END:initComponents

    private void bt_costoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_costoActionPerformed
// TODO add your handling code here:
    
    String codigo=txt_codigo.getText();
    System.out.println("El producto es:|"+codigo+"|");
    if(!codigo.equals("")){
    VentCosto vc=new VentCosto(codigo,conexion,this);    
    }else{
         JOptionPane.showMessageDialog(this,"El codigo del producto no es Correcto","Informacion",JOptionPane.INFORMATION_MESSAGE);
    }
    
    }//GEN-LAST:event_bt_costoActionPerformed
public void refrescar(){
        muestroBodegas(bodega);
        muestroCategorias();
        this.actualizoTotales();
}
      
    private void formFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_formFocusGained
// TODO add your handling code here:
    }//GEN-LAST:event_formFocusGained

    private void panelFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_panelFocusGained
// TODO add your handling code here:
    }//GEN-LAST:event_panelFocusGained

    private void bt_modproActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_modproActionPerformed
// TODO add your handling code here:
        VentCambiosPro vcp=new VentCambiosPro(conexion,bodega);
}//GEN-LAST:event_bt_modproActionPerformed

    private void bt_CrearProActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_CrearProActionPerformed
// TODO add your handling code here:
        VentCreaProd vcp=new VentCreaProd(conexion,bodega,this);
    }//GEN-LAST:event_bt_CrearProActionPerformed
    public int numeroKFactura(){
        int numeroF=0;
        try{
            ResultSet r=conexion.consultarBase("select MAX(cod_Kfactura) from Kfactura");
            r.next();
            numeroF=r.getInt(1)+1;
            
        } catch(java.sql.SQLException e){};
        
        return numeroF;
    }
    private void bt_borrarProActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_borrarProActionPerformed
// TODO add your handling code here:
        String codigoTo=txt_codigo.getText();
        codigoTo=codigoTo.replaceAll(" ","");
        String fecha=new java.sql.Date(System.currentTimeMillis()).toString();
        
        
        if(codigoTo.equals("")){
            JOptionPane.showMessageDialog(this,"El codigo esta en Blanco","Informacion",JOptionPane.INFORMATION_MESSAGE);
        } else{
            
            if(BuscaSiExiste()){
                //Pregunta si esta seguro de eliminar.
                int opccion=0;
                opccion=JOptionPane.showConfirmDialog(this,"Seguro Quiere eliminar el Producto cod= "+txt_codigo.getText()+" Esta eliminaci�n contara como SALIDA KARDEX y estara bajo su Responsabilidad","Alerta",0);
                
                if(opccion==0 ){
                    //System.out.println("Confirma Eliminacion!!!");
                    //Se guarda la eliminacion como una salida de Kardex:
//                    int numeroFact=numeroKFactura();
//                    double precio=Double.parseDouble(txt_precio.getText());
//                    int cantidad=Integer.parseInt(txt_cant.getText());
//                    double total=precio*cantidad;
//                    String fechaB=new java.sql.Date(System.currentTimeMillis()).toString();
//                    
//                    conexion.insertarDatos("insert into Kfactura values("+numeroFact+",,'"+"Eliminacion Producto"+"','"+fecha+"','','','','','"+user.nombre+"',"+total+",,,,,,,)");
//                    conexion.insertarDatos("insert into dtl_kfactura values("+numeroFact+",'"+txt_codigo.getText()+"',"+cantidad+","+total+","+precio+")");
                    
                    
                    //Borrar Productos:
                    conexion.insertarDatos("DELETE FROM producto WHERE cod_producto='"+txt_codigo.getText()+"'");
                    conexion.insertarDatos("DELETE FROM itm_bodega WHERE cod_producto='"+txt_codigo.getText()+"'");
                    
                    
                    //Actualizo en el Inventario si esta Abierto:
                        //ACTUALIZO INVENTARIO ABIERTO ###################
                        //Realizo la actualizacion en el producto del inventario Abierto:
                        ResultSet rInv=conexion.consultarBase("SELECT idInventario FROM inventario where abierto=true;");
                        System.out.println("REALIZO ACTUALIZACION INVENTARIO");
                        System.out.println("INVENTARIO?");
                        System.out.println("SELECT idInventario FROM inventario where abierto=true;"+conexion.obtenerFilas(rInv));
                        if(conexion.obtenerFilas(rInv)>0){
                            
                            System.out.println("Entra en INVENTARIO");
                            int codigoInv=0;
                            try {
                                rInv.beforeFirst();
                                rInv.next();
                                codigoInv=rInv.getInt(1);
                            } catch (SQLException ex) {
                                Logger.getLogger(Productos.class.getName()).log(Level.SEVERE, null, ex);
                            }
                            
                            System.out.println(" INVENTARIO ABIERTO="+codigoInv);
                            //Busco este producto dentro del Inventario:
                            ResultSet rPro=conexion.consultarBase("SELECT cantidad_act,cantidad_cont FROM productoinv where cod_inv="+codigoInv+" and cod_producto like '"+txt_codigo.getText()+"';");
                            System.out.println("PRODUCTO?");
                            if(conexion.obtenerFilas(rPro)>0){
                            //Realizo el cambio de codigo en el producto del inventario:
                            conexion.insertarDatos("DELETE FROM productoinv WHERE cod_producto='"+txt_codigo.getText()+"'");
                            

                            }
                            }
                        //################################################
                        
                    
                    
                    limpiar();
                }else{
                    //System.out.println("NO Confirma!!!");
                }
            }
            else{
            JOptionPane.showMessageDialog(this,"El producto con el codigo:"+txt_codigo.getText()+" aun no ha sido fue CREADO","Informacion",JOptionPane.INFORMATION_MESSAGE);
            }
                
        }
    }//GEN-LAST:event_bt_borrarProActionPerformed

    private void cb_bodegasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cb_bodegasActionPerformed
       //Accion del cambio del Combo de Bodegas:
       bodega=Integer.valueOf(cb_bodegas.getSelectedItem().toString().split(" ")[0]);
       
       muestraProducto();  
       
    }//GEN-LAST:event_cb_bodegasActionPerformed

    private void bt_cCodigoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_cCodigoActionPerformed
// TODO add your handling code here:
        if(txt_codigo.getText().equals("") || area_nom.getText().equals("") || txt_precio.getText().equals("") || txt_cant.getText().equals("") || txt_rank.getText().equals("")){
            JOptionPane.showMessageDialog(this,"Falta llenar campos del Producto","Informacion",JOptionPane.INFORMATION_MESSAGE);
        } else{
            
            
            
            
            String codigo_Nuevo="";
            String codigo_Viejo=txt_codigo.getText();
            String mens="Ingrese el Nuevo Codigo: ";
            codigo_Nuevo = JOptionPane.showInputDialog(this,mens,"AVISO",2);
            //Quito Espacios Blancos del Codigo:
            try{
                codigo_Nuevo=codigo_Nuevo.replaceAll(" ", "");
                
                if(codigo_Nuevo.equals("")||codigo_Nuevo==null){
                    JOptionPane.showMessageDialog(this,"El codigo Nuevo esta en Blanco No Cambio Codigo","Informacion",JOptionPane.INFORMATION_MESSAGE);
                }else{
                    
                    
                    ResultSet r;
                    r=conexion.consultarBase("select * from producto where cod_producto like '"+codigo_Nuevo+"'");
                    int fila_num=conexion.obtenerFilas(r);
                    if(fila_num>0){
                        JOptionPane.showMessageDialog(this,"El codigo ya Existe no Creo Producto","Informacion",JOptionPane.INFORMATION_MESSAGE);
                    } else{
                        conexion.actualizarBase("update itm_bodega set cod_producto='"+codigo_Nuevo+"'"+
                                " where cod_producto like '"+codigo_Viejo+"'");
                        
                        conexion.actualizarBase("update producto set cod_producto='"+codigo_Nuevo+"'"+
                                " where cod_producto like '"+codigo_Viejo+"'");
                        
                        //Actualizo en el Inventario si esta Abierto:
                        //ACTUALIZO INVENTARIO ABIERTO ###################
                        //Realizo la actualizacion en el producto del inventario Abierto:
                        ResultSet rInv=conexion.consultarBase("SELECT idInventario FROM inventario where abierto=true;");
                        System.out.println("REALIZO ACTUALIZACION INVENTARIO");
                        System.out.println("INVENTARIO?");
                        System.out.println("SELECT idInventario FROM inventario where abierto=true;"+conexion.obtenerFilas(rInv));
                        if(conexion.obtenerFilas(rInv)>0){
                            
                            System.out.println("Entra en INVENTARIO");
                            int codigoInv=0;
                            try {
                                rInv.beforeFirst();
                                rInv.next();
                                codigoInv=rInv.getInt(1);
                            } catch (SQLException ex) {
                                Logger.getLogger(Productos.class.getName()).log(Level.SEVERE, null, ex);
                            }
                            
                            System.out.println(" INVENTARIO ABIERTO="+codigoInv);
                            //Busco este producto dentro del Inventario:
                            ResultSet rPro=conexion.consultarBase("SELECT cantidad_act,cantidad_cont FROM productoinv where cod_inv="+codigoInv+" and cod_producto like '"+codigo_Viejo+"';");
                            System.out.println("PRODUCTO?");
                            if(conexion.obtenerFilas(rPro)>0){
                            //Realizo el cambio de codigo en el producto del inventario:
                            conexion.actualizarBase("update productoinv set cod_producto='"+codigo_Nuevo+"'"+
                                " where cod_producto like '"+codigo_Viejo+"'");
                                
                            }

                        }
                        //################################################
                        
                        
                        
//                        String fecha=new java.sql.Date(System.currentTimeMillis()).toString();
//                        AntInfo="cod #"+codigo_Viejo;
//                        String ActualizaFrase="cod #"+codigo_Nuevo+" por:("+user.getNombre()+")";
//                        conexion.insertarDatos("insert into modpro values("+codigo+",'"+AntInfo+"','"+ActualizaFrase+"','"+fecha+"');");
//                        
                        
                        limpiar();
                        txt_codigo.setText(codigo_Nuevo);
                        muestraProducto();
                    }
                    
                    
                }
            }catch(java.lang.NullPointerException e){
                JOptionPane.showMessageDialog(this,"El codigo Nuevo esta en Blanco No Cambio Codigo","Informacion",JOptionPane.INFORMATION_MESSAGE);
            }
        }
    }//GEN-LAST:event_bt_cCodigoActionPerformed

    private void bt_fotoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_fotoActionPerformed
// TODO add your handling code here:
        String s=txt_codigo.getText();
        try{
            int codFoto=Integer.parseInt(s);
            //Aqui la label no aparece si no lengthmando desde el main
            Vent_Foto v= new Vent_Foto(codFoto);
            v.dispose();
            v.main(codFoto);
        }catch(java.lang.NumberFormatException e){
            JOptionPane.showMessageDialog(this,"El Codigo No esta Bien Especificado","Informacion",JOptionPane.INFORMATION_MESSAGE);
        }
}//GEN-LAST:event_bt_fotoActionPerformed
    
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
// TODO add your handling code here:
        limpiar();
    }//GEN-LAST:event_jButton2ActionPerformed
    
    private void bt_accionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_accionActionPerformed
// TODO add your handling code here:
        int opccion=0;
        opccion=JOptionPane.showConfirmDialog(this,"Seguro realizar la modificacion del prod#"+txt_codigo.getText()+" cualquier cambio sera grabado en Control de Cambios!","Alerta",0);
        if(opccion==0){
            
            
            if(txt_codigo.getText().equals("") || area_nom.getText().equals("") || txt_precio.getText().equals("") || txt_cant.getText().equals("") || txt_rank.getText().equals("")){
                JOptionPane.showMessageDialog(this,"Falta llenar campos del Producto","Informacion",JOptionPane.INFORMATION_MESSAGE);
            } else{
                try{
                    Double precio=Double.valueOf(txt_precio.getText());
                    int cant=Integer.parseInt(txt_cant.getText());
                    int rank=Integer.parseInt(txt_rank.getText());
                    
                    if(precio.intValue()>=0 && cant>=0 && rank>=0){
                        if(rank<=5){
                            
                            //Saco el Stock Total:
                            ResultSet r;
                            int stockActual=0;
                            int cantidad=0;
                            int stockTotal=0;
                            
                            r=conexion.consultarBase("SELECT SUM(cantidad) FROM itm_bodega where cod_producto like '"+txt_codigo.getText()+"'");
                            cantidad=Integer.parseInt(txt_cant.getText());
                            try{
                                r.next();
                                stockActual=r.getInt(5);
                                stockTotal=stockActual+cantidad;
                            }catch(java.sql.SQLException e){
                                stockTotal=0;
                                stockTotal=stockActual+cantidad;
                            }
                            
                            //Accion de Modificar Producto:
                            //Verifico si el Producto Existe.
                            ResultSet resp;
                            String ActualizaFrase;
                            resp=conexion.consultarBase("select * from producto where cod_producto like '"+txt_codigo.getText()+"'");
                            int cantBM=0;
                            try {
                                resp.beforeFirst();
                                resp.next();
                                cantBM=resp.getInt(5);
                           
                            } catch (SQLException ex) {
                                Logger.getLogger(Productos.class.getName()).log(Level.SEVERE, null, ex);
                            }
                            int filasIn=conexion.obtenerFilas(resp);
                            if(filasIn>0){
                                //Se Realiza la Modificacion:***
                                //En el caso que el Producto si exista Actualizo tanto Producto como Bodega:
                                //Saco: Categoria Bodegas Nombre Descripcion Precio Ranking:
                                int categoria=cb_categoria.getSelectedIndex()+1;
                                int bodegaIn=Integer.valueOf(cb_bodegas.getSelectedItem().toString().split(" ")[0]);
                                String nombreP=area_nom.getText();
                                String descrP=area_desc.getText();
                                String precioN=txt_precio.getText();
                                String rankP=txt_rank.getText();
                                String cantM="0";
                                if(!txt_min.getText().toString().equals(""))
                                {
                                cantM=txt_min.getText();
                                }
                                
                                conexion.actualizarBase("update producto set cod_categoria="+categoria+", nombre='"+nombreP+"',descripcion='"+descrP+"',stock_total="+stockTotal+",precio_normal='"+precioN+"',precio_distribucion="+txt_distribucion.getText()+",ranking="+rankP+
                                        " where cod_producto like '"+txt_codigo.getText()+"'");
                                
                                
                                //En caso de que exista el producto pero no se Ha Creado en la Bodega la Crea o Actualizo la misma:
                                
                                //Comprueba si existe o no el producto en tal bodega:
                                resp=conexion.consultarBase("select * from itm_bodega where cod_bodega="+bodegaIn+" and cod_producto like '"+txt_codigo.getText()+"'");
                                int filasCons=conexion.obtenerFilas(resp);
                                
                                if (filasCons>0){
                                    conexion.actualizarBase("update itm_bodega set cantidad="+txt_cant.getText()+" , cant_minima="+cantM+" where cod_producto like '"+txt_codigo.getText()+"' and cod_bodega="+bodegaIn+";");
                                    
                                }else{
                                    conexion.insertarDatos("insert into itm_bodega values("+bodegaIn+",'"+txt_codigo.getText()+"',"+txt_cant.getText()+","+cantM+")");
                                    
                                }
                              
                              try{  
                              //ACTUALIZO INVENTARIO ABIERTO ###################
                                //Realizo la actualizacion en el producto del inventario Abierto:
                                ResultSet rInv=conexion.consultarBase("SELECT idInventario FROM inventario where abierto=true;");
                                System.out.println("REALIZO ACTUALIZACION INVENTARIO");
                                System.out.println("INVENTARIO?");
                                System.out.println("SELECT idInventario FROM inventario where abierto=true;"+conexion.obtenerFilas(rInv));
                                if(conexion.obtenerFilas(rInv)>0){
                                    System.out.println("Entra en INVENTARIO");
                                    rInv.beforeFirst();
                                    rInv.next();
                                    int codigoInv=rInv.getInt(1);
                                    System.out.println(" INVENTARIO ABIERTO="+codigoInv);
                                    //Busco este producto dentro del Inventario:
                                    ResultSet rPro=conexion.consultarBase("SELECT cantidad_act,cantidad_cont FROM productoinv where cod_inv="+codigoInv+" and cod_producto like '"+txt_codigo.getText()+"';");
                                    System.out.println("PRODUCTO?");
                                    if(conexion.obtenerFilas(rPro)>0){
                                    System.out.println("PRODUCTO INVENTARIO MOD="+txt_codigo.getText());    
                                    rPro.beforeFirst();
                                    rPro.next();
                                    //Valido el cambio de que no sea menor a cero
                                    int cantAct=Integer.parseInt(this.txt_cant.getText().toString())-cantBM;
                                    int cantCont=Integer.parseInt(this.txt_cant.getText().toString())-cantBM;
                                    
                                    
                                    System.out.println("Los valores son:"+Integer.parseInt(txt_codigo.getText().toString())+" - "+cantBM);
                                    
                                    if((Integer.parseInt(this.txt_cant.getText().toString())-cantBM)>0){
                                    if(rPro.getInt(1)<cantAct ){cantAct=0;}
                                    if(rPro.getInt(2)<cantCont ){cantCont=0;}
                                    }else{
                                    if(rPro.getInt(1)<cantAct || rPro.getInt(1)==0){cantAct=0;}
                                    if(rPro.getInt(2)<cantCont || rPro.getInt(2)==0 ){cantCont=0;}
                                    }
                                    
                                    
                                    //Actualizo la Cantidad del producto del Inventario:
                                      conexion.insertarDatos("UPDATE productoinv SET cantidad_act=cantidad_act+"+cantAct+", cantidad_cont=cantidad_cont+"+cantCont+" where cod_producto like '"+txt_codigo.getText()+"';");  

                                    }else{
                                    //Este producto fue creado recientemente y no esta dentro de los productos del inventario Abierto:
                                       ResultSet rProNuevo=conexion.consultarBase("SELECT cod_producto,cod_categoria,nombre,descripcion,precio_costo,precio_normal,stock_total,precio_distribucion FROM producto p where cod_producto like '"+txt_codigo.getText()+"';");
                                       rProNuevo.beforeFirst();
                                       rProNuevo.next();
                                       conexion.insertarDatos("insert into prductoinv values("+codigoInv+",'"+rProNuevo.getInt(1)+"','"+rProNuevo.getInt(2)+"','"+rProNuevo.getString(3)+"','"+rProNuevo.getString(4)+"',"+rProNuevo.getDouble(5)+","+rProNuevo.getDouble(6)+","+rProNuevo.getInt(7)+",0,"+rProNuevo.getDouble(8)+");");
                                    }

                                }
                              }catch(SQLException esql){
                              System.err.print(esql);
                              }
                                //################################################  
                                
                                
                                
                                //Registro la Actualizacion:
                                ActualizaFrase="cod#"+txt_codigo.getText()+" nom="+area_nom.getText()+" $"+txt_precio.getText()+" cant="+txt_cant.getText()+" por:("+user.getNombre()+")";
                                String fecha=new java.sql.Date(System.currentTimeMillis()).toString();
                                AntInfo=AntInfo+" cant="+cantBM;
                                conexion.insertarDatos("insert into modpro values(null,'"+AntInfo+"','"+ActualizaFrase+"','"+fecha+"');");
                                
                                
                                
                                //*********************************
                            } else {
                                JOptionPane.showMessageDialog(this,"El Producto aun no ha sido creado","Informacion",JOptionPane.INFORMATION_MESSAGE);
                                
                            }
                            
                            
                            
                        } else{
                            JOptionPane.showMessageDialog(this,"Ranking debe ser del 1-5","Informacion",JOptionPane.INFORMATION_MESSAGE);
                        }
                        
                    } else{
                        JOptionPane.showMessageDialog(this,"Valores negativos o nulos","Informacion",JOptionPane.INFORMATION_MESSAGE);
                    }
                }catch(java.lang.NumberFormatException e){
                    JOptionPane.showMessageDialog(this,"Hay un error en el Formato","Informacion",JOptionPane.INFORMATION_MESSAGE);
                }
                
                
            }
        }
        muestraProducto();
        muestroBodegas(bodega);
        this.actualizoTotales();
    }//GEN-LAST:event_bt_accionActionPerformed

    private void cb_bodegasItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cb_bodegasItemStateChanged

    }//GEN-LAST:event_cb_bodegasItemStateChanged

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
// TODO add your handling code here:
        b.setVisible(true);
    }//GEN-LAST:event_jButton1ActionPerformed
    public void limpiar(){
    lbl_total.setText("");
    area_nom.setText("");
    area_desc.setText("");
    txt_precio.setText("0");
    txt_rank.setText("");
    txt_cant.setText("0");
    limpiaTabla();
    }
    
    
       public void muestroBodegas(int bodega){
     cb_bodegas.removeAllItems();
     ResultSet r=conexion.consultarBase("select * from bodega");
     try{
            int numBodegas=conexion.obtenerFilas(r);
            r.beforeFirst();
            while(r.next()){
            cb_bodegas.addItem(r.getString(1)+" | "+r.getString(2));
            }
        }
       catch(SQLException sqle){
            System.out.println("Error al mostrar Bodegas");
            System.err.println(sqle);
        }

      cb_bodegas.setSelectedIndex(0);
    }
    
      public void muestroCategorias(){
     cb_categoria.removeAllItems();
     ResultSet r=conexion.consultarBase("select * from categoria");
     try{
            r.beforeFirst();
            
            while(r.next()){
            String catS=r.getString(2);
//            String cat[]=catS.split("-");
//            System.out.print(cat[1]+" ");
            
            cb_categoria.addItem(catS);
            }
            
        }
       catch(SQLException sqle){
            System.out.println("Error al mostrar Bodegas");
            System.err.println(sqle);
        }
     
     
    }
    
    private void txt_codigoKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txt_codigoKeyTyped
// TODO add your handling code here:
        
        int press=evt.getKeyChar();
        
        //Si es Enter:
             limpiar();
        if(press==10){
                 if(BuscaSiExiste()){
                 limpiar();
                 muestraProducto();
                 }
                 
               else{
               VentCreaProd vcp=new VentCreaProd(conexion,bodega,this,txt_codigo.getText());           
               }
                 
        }else{
       // limpiar();
        
        }
    }//GEN-LAST:event_txt_codigoKeyTyped
     
    public void muestraProducto(){
       
        //Ya existe producto:
        //Creo tabla de bodegas:
        ResultSet r;
        String codigo=txt_codigo.getText();
        r=conexion.consultarBase("select b.cod_bodega as 'Bodega:',b.nombre as 'Nombre:',i.cantidad as 'Cantidad:' from bodega b,itm_bodega i where i.cod_bodega=b.cod_bodega and i.cod_producto like '"+codigo+"';");
        //Obtengo Filas-Arreglo de Titulos de Columnas
        int filas=conexion.obtenerFilas(r);
        String[] titulosCol=conexion.obtenerColumnas(r);
        
        //Creo la tabla:
        
        CrearTabla(filas,titulosCol);
        llenaTabla(r,titulosCol.length,filas);
        
        
        
        //Lleno los datos del producto
        r=conexion.consultarBase("select * from producto where cod_producto like '"+codigo+"';");
        try{
            r.beforeFirst();
            r.next();
            
             refrescar(); 
            //Categoria
            int categoria=r.getInt(2)-1;
            if(categoria==99)
                cb_categoria.setSelectedItem("No Definida");
            else
                cb_categoria.setSelectedIndex(categoria);
            //Nombre
            area_nom.setText(r.getString(3));
            //Descripcion
            area_desc.setText(r.getString(4));
            //Precio normal
            txt_precio.setText(String.valueOf(r.getDouble(6)));
            //Ranking
            txt_rank.setText(String.valueOf(r.getInt(7)));
            
            txt_distribucion.setText(String.valueOf(r.getDouble(10)));
            //Para registras el cambio:
            int c=categoria-1;
            AntInfo="cod#"+codigo+" nom="+r.getString(3)+" $"+r.getDouble(6);
            
        }catch(SQLException sqle){
            System.out.println("Error al mostrar los resultados del producto..");
            System.err.println(sqle);
        }
        
        r=conexion.consultarBase("select b.cantidad,b.cant_minima from producto p, itm_bodega b where p.cod_producto like '"+codigo+"' and p.cod_producto=b.cod_producto and b.cod_bodega="+bodega+";");
        
        try{
            r.beforeFirst();
            r.next();
            //Cantidad de esta Bodega:
            txt_cant.setText(String.valueOf(r.getInt(1)));
            //Cantidad Minima de esta Bodega:
            txt_min.setText(String.valueOf(r.getInt(2)));
            
            
        }catch(SQLException sqle){
            txt_cant.setText("0");
        }
        
        
        
        
        
       
        
    }
    
    
    public void actualizoTotales(){
        // System.out.println("Entra en actualiza");
        int numeroCol=tabla.getRowCount();
        int cont=0;
        double acumula=0;
        String toma;
        
        //Muestro Los Subtotales:
        while (cont<numeroCol){
            
            try{
                toma=tabla.getValueAt(cont, 2).toString();
                acumula=acumula+Double.parseDouble(toma);
            } catch(java.lang.NullPointerException e){};
            cont++;
        }
        lbl_total.setText(String.valueOf(acumula));
        
      
        
    }
    
    
    
    public void llenaTabla(ResultSet r,int columnas,int filas){
        try{
            r.beforeFirst();
            
            int j=0;
            while(r.next()) {
                
                
                for(int i=0;i<columnas;i++) {
                    
                    Object toma=r.getObject(i+1);
                    //System.out.println("toma valor:"+toma+" * fila:"+j+" * column:"+i);
                    try{
                        tabla.setValueAt(toma,j,i);
                    }catch(java.lang.ArrayStoreException e){
                        tabla.setValueAt("null",j,i);
                    }
                }
                
            j++;    
            }
        }catch(SQLException sqle){
            System.out.println("Error al mostrar los datos");
            System.err.println(sqle);
        }
        
    }
    
      public void limpiaTabla(){
        try{  
          for(int j=0;j<tabla.getRowCount();j++) {
              
              for(int i=0;i<tabla.getColumnCount();i++) {
                  
                  try{
                      tabla.setValueAt("",j,i);
                  }catch(java.lang.ArrayStoreException e){
                      tabla.setValueAt("null",j,i);
                  }
              }
              
              
          }
        }
        catch(java.lang.NullPointerException e){}
          
      }
      
      
      public void CrearTabla(int filas,String[] titulos){
          int columnas=titulos.length;
          String[][] tabla0=new String[filas][columnas];
          
          
          tabla= new JTable(tabla0,titulos);
          
          
          final boolean[] canEdit = new boolean [columnas];
          for(int p=0;p<columnas;p++){
              canEdit[p]=false;
          }
          
          try{
              panel.remove(jScrollPane3);
          }catch(java.lang.NullPointerException e){}
          
          jScrollPane3 = new JScrollPane(tabla);
          jScrollPane3.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(198, 196, 196)));
          jScrollPane3.updateUI();
          
          
          tabla.setModel(new javax.swing.table.DefaultTableModel(
                  tabla0,titulos
                  ) {
              // boolean[] canEdit = new boolean [] { false, false, false, false};
              
              public boolean isCellEditable(int rowIndex, int columnIndex) {
                  return canEdit [columnIndex];
              }
          });
          panel.add(jScrollPane3);
          jScrollPane3.setBounds(470, 310, 270, 100);
          
          
          
          
          
      }
      
      
      
      public boolean  BuscaSiExiste(){
          boolean respuesta=false;
          ResultSet r;
          r=conexion.consultarBase("select * from producto where cod_producto like '"+txt_codigo.getText()+"';");
          int filas=conexion.obtenerFilas(r);
          if(filas>0){
              respuesta=true;
          }
          return respuesta;
      }
      
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextArea area_desc;
    private javax.swing.JTextArea area_nom;
    private javax.swing.JButton bt_CrearPro;
    private javax.swing.JButton bt_accion;
    private javax.swing.JButton bt_borrarPro;
    private javax.swing.JButton bt_cCodigo;
    private javax.swing.JButton bt_costo;
    private javax.swing.JButton bt_foto;
    private javax.swing.JButton bt_modpro;
    private javax.swing.JComboBox cb_bodegas;
    private javax.swing.JComboBox cb_categoria;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel14;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel lbl_total;
    private javax.swing.JPanel panel;
    private javax.swing.JTextField txt_cant;
    public javax.swing.JTextField txt_codigo;
    private javax.swing.JTextField txt_distribucion;
    private javax.swing.JTextField txt_min;
    private javax.swing.JTextField txt_precio;
    private javax.swing.JTextField txt_rank;
    // End of variables declaration//GEN-END:variables
    
}
